struct node
{
    int data;
    struct node *left;
    struct node *right;
};

/* newNode() allocates a new node with the given data and NULL left and
 right pointers. */
struct node* newNode(int data)
{
    // Allocate memory for new node
    struct node* node = (struct node*)malloc(sizeof(struct node));
    
    // Assign data to this node
    node->data = data;
    
    // Initialize left and right children as NULL
    node->left = NULL;
    node->right = NULL;
    return(node);
}


int main()
{
    /*create root*/
    struct node *root = newNode(1);
    /* following is the tree after above statement
     
     1
     /   \
     NULL  NULL
     */
    
    
    root->left        = newNode(2);
    root->right       = newNode(3);
    /* 2 and 3 become left and right children of 1
     1
     /   \
     2      3
     /    \    /  \
     NULL NULL NULL NULL
     */
    
    
    root->left->left  = newNode(4);
    /* 4 becomes left child of 2
     1
     /       \
     2          3
     /   \       /  \
     4    NULL  NULL  NULL
     /  \
     NULL NULL
     */
    
    getchar();
    return 0;
}
